package cliente.vista;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.sql.SQLException;

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.GroupLayout.Alignment;

import cliente.controle.ClienteControlador;
import cliente.modelo.Cliente;
import cliente.modelo.TipoPessoa;

public class VisualizarClienteView {

	private JFrame tela;
	private JLabel nome;
	private JLabel nome1;
	private JLabel email;
	private JLabel email1;
	private JLabel cpfCnpj;
	private JLabel cpfCnpj1;
	private JLabel tipoPessoa;
	private JLabel tipoPessoa1;
	private JLabel login;
	private JLabel login1;
	private VerClientesView verClientesView;

	private ActionListener ouvinte;
	private JPanel painel;
	private JButton voltar;
	private JButton alterar;

	private Cliente cliente;

	public void iniciaVisualizarClienteView(int id,
			VerClientesView verClientesView) throws NumberFormatException,
			IOException {
		this.verClientesView = verClientesView;
		ouvinte = new acao();
		tela = new JFrame();
		tela.setBounds(500, 300, 350, 200);
		tela.setResizable(false);
		tela.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		tela.setTitle("Visualizar Cliente");
		painel = new JPanel();

		GroupLayout layout = new GroupLayout(painel);
		painel.setLayout(layout);

		layout.setAutoCreateGaps(true);
		layout.setAutoCreateContainerGaps(true);

		voltar = new JButton("Voltar");
		voltar.addActionListener(ouvinte);
		alterar = new JButton("Alterar");
		alterar.addActionListener(ouvinte);

		cliente = ClienteControlador.get(id);

		nome = new JLabel("Nome do Cliente: ");
		nome1 = new JLabel(cliente.getNome());
		login = new JLabel("Login do Cliente: ");
		login1 = new JLabel(cliente.getLogin());
		int estilo = 0;
		estilo = estilo + Font.ITALIC;
		Font f = new Font(login.getFont().toString(), estilo, 12);
		email = new JLabel("Email do Cliente: ");
		email1 = new JLabel(cliente.getEmail());
		if (cliente.getTipoPessoa() == TipoPessoa.FISICA) {
			tipoPessoa = new JLabel("Tipo do Cliente: ");
			tipoPessoa1 = new JLabel("Pessoa Fisica");
			cpfCnpj = new JLabel("CPF do Cliente: ");
			cpfCnpj1 = new JLabel(cliente.getCpfCnpj());
		} else {
			tipoPessoa = new JLabel("Tipo do Cliente: ");
			tipoPessoa1 = new JLabel("Pessoa Juridica");
			cpfCnpj = new JLabel("CNPJ do Cliente: ");
			cpfCnpj1 = new JLabel(cliente.getCpfCnpj());
		}
		login1.setFont(f);
		nome1.setFont(f);
		cpfCnpj1.setFont(f);
		email1.setFont(f);
		tipoPessoa1.setFont(f);

		organizaFields(layout);

		tela.setLayout(new BorderLayout());
		tela.add(painel, BorderLayout.CENTER);
		tela.setVisible(true);

	}

	class acao implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent arg0) {
			if (arg0.getSource() == voltar) {
				tela.dispose();
			}
			if (arg0.getSource() == alterar) {
				AlterarClienteView alterarClienteView = new AlterarClienteView();
				try {
					alterarClienteView.iniciaAlterarClienteView(cliente,
							verClientesView, VisualizarClienteView.this);
				} catch (NumberFormatException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	private void criaGruposVerticais(GroupLayout layout) {
		GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(nome).addComponent(nome1));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(login).addComponent(login1));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(email).addComponent(email1));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(tipoPessoa).addComponent(tipoPessoa1));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(cpfCnpj).addComponent(cpfCnpj1));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(voltar).addComponent(alterar));
		layout.setVerticalGroup(vGroup);
	}

	private void criaGruposHorizontais(GroupLayout layout) {
		GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
		hGroup.addGroup(layout.createParallelGroup().addComponent(nome)
				.addComponent(login).addComponent(email).addComponent(
						tipoPessoa).addComponent(cpfCnpj).addComponent(voltar));
		hGroup.addGroup(layout.createParallelGroup().addComponent(nome1)
				.addComponent(login1).addComponent(email1).addComponent(
						tipoPessoa1).addComponent(cpfCnpj1).addComponent(
						alterar));
		layout.setHorizontalGroup(hGroup);
	}

	private void organizaFields(GroupLayout layout) {
		criaGruposHorizontais(layout);
		criaGruposVerticais(layout);
	}

	public void atualiza() {
		try {
			cliente = ClienteControlador.get(cliente.getId()); // pega os dados
																// do banco de
																// dados
																// novamente
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} //

		nome1.setText(cliente.getNome());
		login1.setText(cliente.getLogin());
		email1.setText(cliente.getEmail());
		if (cliente.getTipoPessoa() == TipoPessoa.FISICA) {
			cpfCnpj1.setText(cliente.getCpfCnpj());
		} else {
			cpfCnpj1.setText(cliente.getCpfCnpj());
		}
	}

}
